#!/bin/bash

# Nombre: paquetes.inc.sh
# Autor: Luis Guillen
# Fecha: 2009-01-16
# Descipcion:
#   Esta libreria proporciona las funciones necesarias para
#   la gestión e instalación de paquetes
#   Requiere de: base.inc.sh

# solo requerido para instalacion de paquetes remotos
PATH_WINEXE=/home/luis/bin/winexe


copiaPaquete()
{
	if [ $# -ne 2 ]; then
		echo "copiaPaquete() ERROR: Debe de pasar el nombre del paquete y la partición!!"
		exit 1
	fi

	nombre_paquete=$1
	dispositivo=$2
	nomdis=`echo $dispositivo | cut -f3 -d/`

	ntfsEstaMontado $dispositivo
	if [ $? -ne 0 ]; then
		escribeLog "ERROR: no se encuentra montada la partición a la que se deben copiar los paquetes"
		return 1
	fi

	cifsEstaMontado $DEPLOY_SERVER $CIFS_SHARE
	if [ $? -ne 0 ]; then
                escribeLog "ERROR: No está montado el recurso de imágenes"
                return 1
	fi

	path_windows=${ROOTNTFS}/${nomdis}
	path_paquetes=${ROOTCIFS}/${DEPLOY_SERVER}/${CIFS_SHARE}/${PAQUETES_PATH}

	if [ -d ${path_paquetes}/${nombre_paquete} ]; then
		mkdir -p ${path_windows}/PKG
		cp -r ${path_paquetes}/${nombre_paquete} $path_windows/PKG
		if [ $? -eq 0 ]; then
			escribeLog "Paquete ${nombre_paquete} copiado"
			return 0
		else
			escribeLog "ERROR: durante la copia del paquete ${nombre_paquete}"
			return 1
		fi
	else
		escribeLog "ERROR: no existe el paquete ${nombre_paquete}"
		return 1
	fi
}


copiaPaqueteEquipoRemoto()
{
	if [ $# -ne 2 ]; then
		echo "copiaPaqueteEquipoRemoto() ERROR: Debe de pasar el nombre del paquete y la ip del equipo!!"
		exit 1
	fi

	nombre_paquete=$1
	equipo_remoto=$2

	cifsEstaMontado $DEPLOY_SERVER $CIFS_SHARE
	if [ $? -ne 0 ]; then
                escribeLog "ERROR: No está montado el recurso de software"
                return 1
	fi

	cifsEstaMontado $equipo_remoto C$
	if [ $? -ne 0 ]; then
                escribeLog "ERROR: No está montado el equipo remoto"
                return 1
	fi

	path_paquetes=${ROOTCIFS}/${DEPLOY_SERVER}/${CIFS_SHARE}/${PAQUETES_PATH}
	path_remoto=${ROOTCIFS}/${equipo_remoto}/C$

	if [ -d ${path_paquetes}/${nombre_paquete} ]; then
		mkdir -p ${path_remoto}/PKG
		if [ -d ${path_remoto}/PKG/${nombre_paquete} ]; then
			escribeLog "Ya existe el paquete"
			return 0
		fi
		cp -r ${path_paquetes}/${nombre_paquete} $path_remoto/PKG
		if [ $? -eq 0 ]; then
			escribeLog "Paquete ${nombre_paquete} copiado"
			return 0
		else
			escribeLog "ERROR: durante la copia del paquete ${nombre_paquete}"
			return 1
		fi
	else
		escribeLog "ERROR: no existe el paquete ${nombre_paquete}"
		return 1
	fi
}


eliminaPaqueteEquipoRemoto()
{
	if [ $# -ne 2 ]; then
		echo "eliminaPaqueteEquipoRemoto() ERROR: Debe de pasar el nombre del paquete y la ip del equipo!!"
		exit 1
	fi

	nombre_paquete=$1
	equipo_remoto=$2

	cifsEstaMontado $equipo_remoto C$
	if [ $? -ne 0 ]; then
                escribeLog "ERROR: No está montado el equipo remoto"
                return 1
	fi

	path_remoto=${ROOTCIFS}/${equipo_remoto}/C$

	if [ -d ${path_remoto}/${nombre_paquete} ]; then
		rm -rf ${path_remoto}/${nombre_paquete}
		escribeLog "Paquete liminado"
		return 0
	else
		escribeLog "ERROR: no existe el paquete en el equipo destino"
		return 1
	fi

}


# Inicializamos el contador de paquetes y de reinicios
nPaquete=0
nReinicios=0

# array de lineas del guirunonce
# fix: mirar alguna marea de poder limpiar esto
declare -a aLineasGuiRunOnce

configuraPaquete()
{
	if [ $# -ne 2 ]; then
		echo "configuraPaquete() ERROR: Debe de pasar el nombre del paquete y la partición en la que se encuentra!!"
		exit 1
	fi
	nombre_paquete=$1
	dispositivo=$2
	nomdis=`echo $dispositivo | cut -f3 -d/`

	ntfsEstaMontado $dispositivo
	if [ $? -ne 0 ]; then
		escribeLog "ERROR: no se encuentra montada la partición especificada para el paquete"
		return 1
	fi

	path_windows=${ROOTNTFS}/${nomdis}
	path_paquete=${path_windows}/PKG/$nombre_paquete
	if [ -d ${path_paquete} ]; then
		#Le digo donde tiene el al configurador del paquete
		DIR_PKG="%systemdrive%\\PKG\\${nombre_paquete}"

		# Incluyo la configuración del paquete
		. ${path_paquete}/config.cfg
		config_paquete

		aLineasGuiRunOnce[$nPaquete]="Command${nPaquete}=\"${cfg_pkg_ejecuta}\""
		#sCadenaGuiRunOnce="${sCadenaGuiRunOnce}\nCommand${nPaquete}=\"${cfg_pkg_ejecuta}\""

		# Inicializa la primera vez a 1
		if [ $nReinicios -eq 0 ]; then
			nReinicios=1
		fi
		# Sumamos a los reinicios con los determinados por el paquete
		let nReinicios=nReinicios+cfg_pkg_reboot
		
		let nPaquete=nPaquete+1
	else
		escribeLog "ERROR: no existe el paquete ${nombre_paquete} en el disco duro"
		return 1
	fi
}


ejecutaInstalacionEquipoRemoto()
{
	if [ $# -ne 2 ]; then
		echo "configuraPaquete() ERROR: Debe de pasar el nombre del paquete y el equipo remoto!!"
		exit 1
	fi

	nombre_paquete=$1
	equipo_remoto=$2


	nombre_paquete=$1
	equipo_remoto=$2

	cifsEstaMontado $equipo_remoto C$
	if [ $? -ne 0 ]; then
                escribeLog "ERROR: No está montado el equipo remoto"
                return 1
	fi

	path_remoto=${ROOTCIFS}/${equipo_remoto}/C$
	path_paquete=${path_remoto}/PKG/$nombre_paquete

	if [ -d ${path_paquete} ]; then
		#Le digo donde tiene el al configurador del paquete
		DIR_PKG="%systemdrive%\\PKG\\${nombre_paquete}"

		# Incluyo la configuración del paquete
		. ${path_paquete}/config.cfg
		config_paquete

#		echo "${cfg_pkg_ejecuta}"

		if [ ! -z $REMOTE_DEPLOY_DOMINIO ]; then
			${PATH_WINEXE} -U ${REMOTE_DEPLOY_DOMINIO}/${REMOTE_DEPLOY_ADMIN}%${REMOTE_DEPLOY_PASSWORD} //${equipo_remoto}  "${cfg_pkg_ejecuta}"
			if [ $? -eq 0 ]; then
				escribeLog "${nombre_paquete} se ha instalado en el equipo remoto"
				return 0
			else
				escribeLog "Pudo haber problemas en la instalación de ${nombre_paquete}"
				return 1
			fi

		else
			${PATH_WINEXE} -U ${REMOTE_DEPLOY_ADMIN}%${REMOTE_DEPLOY_PASSWORD} //${equipo_remoto} "cmd /C ${cfg_pkg_ejecuta}"
			if [ $? -eq 0 ]; then
				escribeLog "${nombre_paquete} se ha instalado en el equipo remoto"
				return 0
			else
				escribeLog "Pudo haber problemas en la instalación de ${nombre_paquete}"
				return 1
			fi
		fi
	else
		escribeLog "ERROR: no existe el paquete ${nombre_paquete} en el equipo remoto"
		return 1
	fi


}



programaReinicio()
{
	sComandoReinicio='%WINDIR%\system32\shutdown -r -t 0'
	aLineasGuiRunOnce[$nPaquete]="Command${nPaquete}=\"${sComandoReinicio}\""
	let nPaquete=nPaquete+1
}


#obtenSeccionGuiRunOnce()
#{
#	echo $sCadenaGuiRunOnce
#}

obtenNumeroReinicios()
{
	echo $nReinicios
}